衷于栖
  • 衷于栖
  • 首页
  • 归档
  • 关于

Image
Profile Picture

衷于栖

自由开发者

分类目录

三维技术4 介绍2 应用1 异常1 技术笔记17 游戏2 源码解读3 管理5 读书笔记3 车联网3 转载11 随笔3

热门标签

  • GIT
  • 工作流指南
  • docker
  • SCRUM
  • JT808
  • 百度地图
  • 狼人杀
  • 模型数据结构
  • 敏捷
  • 扩展
  • 学习WEBGL系列
  • 可维护
  • GlTF
  • CentOS
  • 高德地图
  • 集中式
  • 郭麒麟
  • 郭德纲
  • 进阶
  • 路由节点编辑器

微信订阅

Image

友情链接

王海达博客 Steve Yegge Debug 客栈 Codelei's Blog 笛卡尔积 Java九点半课堂 薛定喵君

【MySQL】[HY000][1366] Incorrect string value - 解决

2019-01-03     异常


MySQL 5.6 [HY000][1366] Incorrect string value 异常。

原因

普通的汉字使用 utf8 表示占位是三个字节,特殊情况下可能会用到 utf8 四字节的情况。 MySQL-5.5.3 之前的版本是不支持四字节 utf8 字符的,之后的版本可以通过 utf8mb4 使用四字节 utf8 编码。

解决方案

  • 首先升级 MySQL 到 5.5.3 之后的版本。
  • 关闭 MySQL 的服务,并且修改配置文件。(这个是为了以后重启数据库不会改变数据库配置)
1
2
3
4
5
6
7
8
9
10
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4;'
  • 修改对应的字符编码(可以掠过第二步直接设置,但是重启会被修改回来)
1
2
3
4
5
6
-- 任何一个只要不是 utf8mb4 就修改一下,正常应该是不用修改的。
set character_set_client = 'utf8mb4';
set character_set_connection = 'utf8mb4';
set character_set_databse = 'utf8mb4';
set character_set_server = 'utf8mb4';
set character_set_results = 'utf8mb4';
  • 修改对应数据库、表、字段编码
1
2
3
alter database test character set utf8mb4 collate utf8mb4_general_ci;
alter table test.test convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table test.test modify columnName varchar(50) character set utf8mb4 collate utf8mb4_general_ci;
  • 连接数据库的时候不要使用 characterEncoding=utf8

测试

1
2
3
4
5
6
-- 可以向数据库插入这个字符 检查是否成功
insert into tableName (name) values ('𦱾');
-- 检查字符编码
show variables like 'character%';
-- 检查版本号
select version();

总结经验

推广一下其实这样可以解决大部分字符编码的问题,不管是转换成 gbk 还是任何编码。像是由于其他问题导致的这个异常都可以通过修改成 utf8 的方式解决,但对于移动端的一些特殊字符,仅仅三个字节的 utf8 已经不能满足需求,所以才会使用 utf8mb4 这种编码。

其他问题

windows上mysql配置文件的位置

安装版本mysql启动都会有个配置参数,可以检查一下启动项的快捷方式:

1
"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe" "--defaults-file=C:\ProgramData\MySQL\MySQL Server 5.7\my.ini" "-uroot" "-p"

免安装版本在安装到系统服务或者启动的时候,都会设置一个配置文件路径 mysqld install MySQL --defaults-file="D:\mysql-5.6.16-win32\my.ini"

如果是自动安装或者别人安装的话,可以直接在服务里增加启动参数:"--defaults-file=C:\ProgramData\MySQL\MySQL Server 5.7\my.ini",修改路径即可。

另附删除服务命令:mysqld remove

#MySQL #Incorrect string value

Copyright © 2021 zhoyq.com. All rights reserved.

京ICP备 17068495号-1